package com.atguigu.springbootdemo.controller;

import com.atguigu.springbootdemo.bean.MyParam;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.jws.Oneway;
import java.util.Map;

@RestController
//默认为这个类中所有标注了@RequestMapping的方法，都添加了/a前缀
@RequestMapping("/a")
public class ReceiveParamController {
    /*
    参数分为两类：
        一类称为普通参数，或单表参数
            只需要在处理方法的形参位置声明和请求参数名一致的参数即可接收。
            声明的形参类型，只要能兼容参数值即可
            /sendParam?name=jack&age=20

        一类称为json格式的参数
     */
    @RequestMapping("/sendParam")
    public Object handle(String name,Integer age){
        System.out.println("name:"+name+"age:"+age);
        return "ok";
    }

    /*
    如果普通参数的个数较多，可以使用
            Bean（属性名必须和参数名一致，否则收不到） 或 Map 去接收
     */
    @RequestMapping("/sendParam1")
    public Object handle1(@RequestParam Map<String,Object> param){
        System.out.println("param:" + param);
        return "ok";
    }
    @RequestMapping("/sendParam2")
    public Object handle2(MyParam param){
        System.out.println("param:" + param);
        return "ok";
    }

    /*
    json格式的参数，使用浏览器地址栏或a标签，无法模拟
            只能通过 apipost模拟
                    在形参位置，只能声明Bean或Map
                           如果是Bean，Bean的属性必须和Json中的属性名一一对应，才能接收
                    必须在参数前添加@RequsetBody注解

                    json格式的参数必须在浏览器的请求的pay-load中找到
     */
    @RequestMapping("/sendJsonParam")
    public Object handle3(@RequestBody MyParam param){
        System.out.println("param:" + param);
        return "ok";
    }

    @RequestMapping("/sendJsonMapParam")
    public Object handle4(@RequestBody Map<String,Object> param){
        System.out.println("param:" + param);
        return "ok";
    }

    /*
    接收路径上的参数
            /a/b/c
            获取b
     */
    @RequestMapping("/a/{hahaha}/c")
    public Object handle5(@PathVariable("hahaha") String path){
        System.out.println("path:"+path);
        return "ok";
    }

}

//@RestController
//public class ReceiveParamController {
//    /*
//    参数分为两类：
//        一类称为普通参数，或表单参数
//            只需要在处理方法的形参位置和请求参数名一致的参数即可接收
//            声明的形参类型，只要能兼容参数值即可
//            /sendParam?name=jack&age=20
//
//        一类称为json格式的参数
//     */
//
//    @RequestMapping("/sendParam")
//    public Object handle(String name,Integer age){
//        System.out.println("name:" + name+"age:" +age);
//
//        return "ok";
//    }
//
//    /*
//    如果普通参数的个数较多，可以使用
//            Bean（属性名必须和参数名一致，否则收不到） 或 Map去接收
//     */
//    @RequestMapping("/sendParam1")
//    public Object handle1(@RequestParam Map<String,Object> param){
//        System.out.println("param:"+ param);
//        return "ok";
//    }
//
//    @RequestMapping("/sendParam2")
//    public Object handle2(MyParam Param){
//        System.out.println("param:" + Param);
//        return "ok";
//    }
//
//
//    /*
//    json格式的参数，使用浏览器地址栏或a标签，无法模拟
//        只能通过apipost模拟
//            在形参位置，只能声明Bean或Map
//                    如果是Bean，Bean的属性必须和Json中的属性名一一对应，才能接收
//            必须在参数前添加@RequestBody注解
//            json格式的参数必须在浏览器的请求的pay-load中找到
//     */
//    @RequestMapping("/sendJsonParam")
//    public Object handle3(@RequestBody MyParam param){
//        System.out.println("param:" + param);
//        return "ok";
//    }
//
//    @RequestMapping("/sendJsonMapParam")
//    public Object handle4(@RequestBody Map<String,Object> param){
//        System.out.println("param:"+param);
//        return "ok";
//    }
//
//    /*
//    接收路径上的参数
//            /a/b/c
//            获取b
//     */
//    @RequestMapping("/a/{hahaha}/c")
//    public Object handle4(@PathVariable("hahaha") String path){
//        System.out.println("path:" + path);
//        return "ok";
//    }
//}

//@RestController
//public class ReceiveParamController {
//    @RequestMapping("/senndParam")
//    public Object handle(String name,Integer age){
//        System.out.println("name:"+name+"age:"+age);
//        return "ok";
//    }
//
//    @RequestMapping("/sendParam1")
//    public Object handle2(@RequestParam Map<String,Object> param){
//        System.out.println("param:"+param);
//        return "ok";
//    }
//
//    @RequestMapping("/sendParam2")
//    public Object handle3(MyParam param){
//        System.out.println("param:" + param);
//        return "ok";
//    }
//
//    @RequestMapping("/sendJsonParam")
//    public Object handle4(@RequestBody MyParam param){
//        System.out.println("param:" + param);
//        return "ok";
//    }
//
//    @RequestMapping("/sendJsonMapParam")
//    public Object handle5(@RequestBody Map<String,Object> param){
//        System.out.println("param:" + param);
//        return "ok";
//    }
//
//    @RequestMapping("/a/{hahaha}/c")
//    public Object handle6(@PathVariable("hahaha") String path){
//        System.out.println("path:"+path);
//        return "ok";
//    }
//}